package primary.primary0;

import java.util.ArrayList;
import java.util.List;

public class S0498对角线遍历 {

    public static void main(String[] args) {
        int[][] inputMat = new int[3][3];
        inputMat[0][0] = 1;
        inputMat[0][1] = 2;
        inputMat[0][2] = 3;
        inputMat[1][0] = 4;
        inputMat[1][1] = 5;
        inputMat[1][2] = 6;
//        inputMat[2][0] = 7;
//        inputMat[2][1] = 8;
//        inputMat[2][2] = 9;
        System.out.println(new S0498对角线遍历().getPlainMat(inputMat));
    }

    public List<Integer> getPlainMat(int[][] inputMat) {
        if (inputMat == null || inputMat.length == 0
                || inputMat[0].length == 0) {
            return new ArrayList<>();
        }
        List<Integer> res = new ArrayList<>();
        appendRes(res, inputMat, 0, 0, 0);
        return res;
    }

    // diraction 0表示右上，1表示左下
    public void appendRes(List<Integer> res, int[][] inputMat, int curRow, int curCol, int diraction) {
        System.out.println("当前行" + curRow + " 当前列" + curCol);
        if(curRow == inputMat.length && curCol == inputMat[0].length - 1){
            return;
        }
        // 正常范围内，存储
        res.add(inputMat[curRow][curCol]);
        if (diraction == 0) {
            if (curRow == 0 && curCol != inputMat[0].length - 1) {
                // 上面, 不包括顶点
                appendRes(res, inputMat, 0, curCol + 1, 1);
            } else if (curCol == inputMat[0].length - 1) {
                // 右侧，包括右上顶点
                appendRes(res, inputMat, curRow + 1, curCol, 1);
            } else {
                appendRes(res, inputMat, curRow - 1, curCol + 1, 0);
            }
        } else {
            if (curCol == 0 && curRow != inputMat.length - 1) {
                // 左面，不包括左下顶点
                appendRes(res, inputMat, curRow + 1, curCol, 0);
            } else if (curRow == inputMat.length - 1) {
                // 下侧，包括左下顶点
                appendRes(res, inputMat, curRow, curCol + 1, 0);
            } else {
                appendRes(res, inputMat, curRow + 1, curCol - 1, 1);
            }
        }

    }

}
